package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.SysOrder;
import com.ruoyi.system.vo.OrderStatisticsRes;
import com.ruoyi.system.vo.SysUserReportRes;
import com.ruoyi.system.vo.WithdrawStatisticsRes;
import com.ruoyi.system.vo.req.SysOrderReq;
import com.ruoyi.system.vo.req.SysReportReq;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单Mapper接口
 *
 * @author Ericcc
 * @date 2021-03-01
 */
public interface SysOrderMapper
{
    /**
     * 查询订单
     *
     * @param orderId 订单ID
     * @return 订单
     */
    public SysOrder selectSysOrderById(Long orderId);

    /**
     * 查询订单列表
     *
     * @param sysOrder 订单
     * @return 订单集合
     */
    public List<SysOrder> selectSysOrderList(SysOrderReq sysOrder);

    /**
     * 新增订单
     *
     * @param sysOrder 订单
     * @return 结果
     */
    public int insertSysOrder(SysOrder sysOrder);

    /**
     * 修改订单
     *
     * @param sysOrder 订单
     * @return 结果
     */
    public int updateSysOrder(SysOrder sysOrder);

    /**
     * 删除订单
     *
     * @param orderId 订单ID
     * @return 结果
     */
    public int deleteSysOrderById(Long orderId);

    /**
     * 批量删除订单
     *
     * @param orderIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysOrderByIds(String[] orderIds);


    /**
     * 获取单位时间内总金额
     *
     * @return 结果
     */
    public BigDecimal getTimeRangeBalance(@PathVariable("beginTime") long beginTime);

    /**
     * 获取单位时间内总次数
     *
     * @return 结果
     */
    public int getTimeRangeSize(@Param("beginTime") long beginTime);

    /**
     * 订单号查重
     * @param orderChildCode
     * @return
     */
    int checkByOrderChildCode(@Param("orderChildCode") String orderChildCode);

    /**
     * 根据平台订单号查询订单
     * @param orderCode
     * @return
     */
    SysOrder getByOrderCode(@Param("orderCode") String orderCode);

    /**
     * 根据条件或单位时间获取订单统计
     * @param sysOrder
     * @return
     */
    BigDecimal selectSysOrderAmount(SysOrderReq sysOrder);

    /**
     * 根据条件获取订单统计
     * @param sysOrder
     * @return
     */
    OrderStatisticsRes selectSysOrderStatistics(SysOrderReq sysOrder);

    /**
     * 获取商户报表
     * @param sysReportReq
     * @return
     */
    List<SysUserReportRes> selectUserReport(SysReportReq sysReportReq);

    /**
     * 获取代理报表
     * @param sysReportReq
     * @return
     */
    List<SysUserReportRes> selectAgentReport(SysReportReq sysReportReq);

    /**
     * 获取代理底下商户订单
     * @param sysOrder
     * @return
     */
    List<SysOrder> selectSysAgentOrder(SysOrderReq sysOrder);

    /**
     * 获取代理底下商户统计
     * @param sysOrder
     * @return
     */
    OrderStatisticsRes selectAgentSysOrderStatistics(SysOrderReq sysOrder);

    /**
     * 获取代理底下商户单位时间内金额统计
     * @param sysOrder
     * @return
     */
    BigDecimal selectAgentSysOrderAmount(SysOrderReq sysOrder);

    /**
     * 获取代理底下商户报表
     * @param sysReportReq
     * @return
     */
    List<SysUserReportRes> selectChidldUserReport(SysReportReq sysReportReq);

    /**
     * 获取代理底下代理报表
     * @param sysReportReq
     * @return
     */
    List<SysUserReportRes> selectChidldAgentReport(SysReportReq sysReportReq);

    /**
     * 获取高级代理底下商户订单
     * @param sysOrder
     * @return
     */
    List<SysOrder> selectSysHighAgentOrder(SysOrderReq sysOrder);

    /**
     * 获取高级代理底下商户订单统计
     * @param sysOrder
     * @return
     */
    OrderStatisticsRes selectHighAgentSysOrderStatistics(SysOrderReq sysOrder);

    /**
     * 获取代高级理底下商户单位时间内金额统计
     * @param sysOrder
     * @return
     */
    BigDecimal selectHighAgentSysOrderAmount(SysOrderReq sysOrder);

    /**
     * 获取高级代理底下商户报表
     * @param sysReportReq
     * @return
     */
    List<SysUserReportRes> selectHighChidldUserReport(SysReportReq sysReportReq);
}
